关于Session("Verifycode") 实在是让我头疼?

来源:百度知道 编辑:UC知道 时间:2024/06/21 09:19:14
<input tabindex="3" size="12" name="Verifycode" class=f11 value="<%=Session("Verifycode")%>"/> <img src="code.asp?<%=timer()%>" width="60" height="15"/>

我为了让人方便,不输入验证码。 就在value中调用Session("Verifycode") 以上是我的表单部分代码。

但是:为什么value实际显示的和<img src="code.asp?<%=timer()%>" width="60" height="15"/> 显示的不一样。比如value显示7799 但是img却是2793 为什么?

而且图片显示的才是真的验证码。

我还以为是加密过了,但是在看 提交后判断的页面是这样写的

if Cint(request("Verifycode"))<>Session("Verifycode") then
response.write"<SCRIPT language=JavaScript>alert('验证码填写不正确!');"
response.write"javascript:history.go(-1)</SCRIPT>"
end if

看上去也没有加密啊~~~

<%=Session("Verifycode")%>
取得的就是上一次访问code.asp页面时生成的验证码,

因为
<img src="code.asp?<%=timer()%>
这个请求是在显示验证码的页面已经输出到客户端以后,才去向服务器请求的。

和你说一下工作原理你就能明白了,

用户通过浏览器请求一个asp页面,
服务端IIS服务器收到了这个请求,
把这个asp页面解释执行后的代码(HTML代码),返回给浏览器,
然后浏览器把这些结果显示出来。

而这段代码:
<img src="code.asp?<%=timer()%>" width="60" height="15"/>

实际上被服务器执行的只是一个timer()函数

服务器只是将<%=timer()%>这个函数的结果显示出来了,并没有去执行你code.asp中的代码,你的code.asp中的代码,实际上是在login.asp这个页面执行结果返回给客户端浏览器以后,浏览器根据HTML代码
<img src="code.asp?564655121" width="60" height="15"/>
再次向服务器发出一个执行code.asp文件的请求。

而这时
<input tabindex="3" size="12" name="Verifycode" class=f11 value="<%=Session("Verifycode")%>"/>
已经早就执行完成了,所以根本不可能显示正确。

你得到的永远都是上一次生成的验证码,而绝对不可能得到当前显示出来的验证码。